package com.iot.tenant.service;

import com.dc3.common.bean.R;
import com.iot.tenant.pojo.Dc3Tenant;
import com.iot.tenant.pojo.Dc3TenantBind;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

import java.util.List;

/**
 * @Author 咕唧
 * @Date 2022/7/14 20:08
 * @Version 1.0
 */
public interface TenantService {
    /**
     * 添加租户
     *
     * @param dc3Tenant
     * @return
     */
    Mono<R<Object>> addTenant(Mono<Dc3Tenant> dc3Tenant);

    /**
     * 根据id查询租户
     *
     * @param id
     * @return
     */
    Mono<Dc3Tenant> findById(String id);

    /**
     * 根据姓名查询，要求必须是准确名字
     *
     * @param name
     * @return
     */
    Flux<Dc3Tenant> findByName(String name);

    /**
     * 更新租户数据
     *
     * @param tenantMono
     * @return
     */
    Mono<R<Object>> updateTenant(Mono<Dc3Tenant> tenantMono);

    /**
     * 查询租户并且带着租户下的所有用户
     *
     * @param tenantId
     * @return
     */
    Mono<Dc3Tenant> findWithUsers(String tenantId);

    /**
     * 查询用户、租户绑定的数量
     * @param tenantId
     * @param userIds
     * @return
     */
    Mono<Integer> findCountByTenantIdAndUserId(String tenantId, List<String> userIds);

    /**
     * 添加用户和租户绑定关系
     * @param dc3TenantBind
     * @return
     */
    Mono<R<Object>> bindUser2Tenant(Mono<Dc3TenantBind> dc3TenantBind);
}
